package com.payment.system.service;

import com.payment.common.base.AjaxResult;
import com.payment.system.domain.Merchant;

import java.util.List;
import java.util.Map;

/**
 * 商户 服务层
 *
 * @author payment
 * @date 2018-12-27
 */
public interface IMerchantService {
    /**
     * 查询商户信息
     *
     * @param iD 商户ID
     * @return 商户信息
     */
    public Merchant selectMerchantById(String iD);

    /**
     * 后台商户查看详情
     *
     * @param iD
     * @return
     */
    public Merchant selectMerchantByIdDeDensity(String iD);


    /**
     * 查询商户列表
     *
     * @param merchant 商户信息
     * @return 商户集合
     */
    public List<Merchant> selectMerchantList(Merchant merchant);

    /**
     * 新增商户
     *
     * @param merchant 商户信息
     * @return 结果
     */
    public int insertMerchant(Merchant merchant);

    /**
     * 修改商户
     *
     * @param merchant 商户信息
     * @return 结果
     */
    public int updateMerchant(Merchant merchant);

    // 启用或禁用商户
    AjaxResult updateUseStatusById(String id);

    /**
     * app用户登陆
     *
     * @param loginName  账号
     * @param password   密码
     * @param versionNo  版本号
     * @param systemType 系统类型 【IOS/Android】 0 ios 1安卓
     * @return
     */
    AjaxResult login(String loginName, String password, String versionNo, String systemType, String isOnline);

    /**
     * app商户注册
     *
     * @param phone       登录注册手机号
     * @param password    登录密码
     * @param passwordNow 确认密码
     * @param code        手机验证码
     * @param parentPhone 推荐人手机号
     * @return
     */
    AjaxResult register(String phone, String password, String passwordNow, String code, String parentPhone);

    /**
     * app端用户忘记密码
     *
     * @param phone       手机号
     * @param password    密码
     * @param passwordNow 确认密码
     * @param code        验证码
     * @return
     */
    AjaxResult restPasswordByCode(String phone, String password, String passwordNow, String code);

    // 修改密码
    AjaxResult updatePasswordByMerchantId(String merchantId, String password, String passwordNow);

    // 发送验证码
    AjaxResult getMessageCode(String phone);

    /**
     * app商户实名认证第二步，实名认证四要素审核
     *
     * @param merchantId   用户ID
     * @param name         姓名
     * @param idCard       身份证号
     * @param phone        手机号
     * @param bankAccount  储蓄卡号
     * @param bankProvince 开户行省
     * @param bankCity     开户行市
     * @return
     */
    public AjaxResult authenticationTwo(String merchantId, String name, String idCard, String phone, String bankAccount,
                                        String bankProvince, String bankCity);

    // app端设置交易密码
    AjaxResult savePayPassword(String merchantId, String password, String passwordNow, String code);

    // app修改交易密码
    AjaxResult updatePayPassword(String merchantId, String passwordOld, String password, String passwordNow);

    // app忘记交易密码
    AjaxResult restPayPasswordByCode(String merchantId, String phone, String password, String passwordNow, String code);

    /**
     * 更换储蓄卡
     *
     * @param merchantId  商户id
     * @param bankAccount 储蓄卡号
     * @param linkPhone   预留手机号
     * @param payPwd      交易密码
     * @return
     * @throws Exception
     */
    AjaxResult replaceSettlementCard(String merchantId, String bankAccount, String linkPhone, String payPwd, String bankProvince, String bankCity) throws Exception;


    /**
     * app获取直推客户信息
     *
     * @param merchantPhone 手机号
     * @param pageNum       页数
     * @param pageSize      每页条数
     * @return
     */
    AjaxResult directCustomerList(String merchantPhone, Integer pageNum, Integer pageSize);

    // 自动补全商户名称
    List<String> selectNameByAutosearch(String name);

    /**
     * 查询商户信息
     *
     * @param phone 商户手机号
     * @return 商户信息
     */
    public Merchant selectByPhone(String phone);

    // 校验支付密码
    AjaxResult verificationPayPassword(String merchantId, String payPassword);

    // 返回：总收益， 可提现 ，冻结 ，已提现
    AjaxResult selectMoneyTotalByMerchantId(String merchantId);


    /**
     * 查询商户统计记录
     *
     * @param merchantId 用户ID
     * @return
     */
    AjaxResult selectMerchantStatisticRecordByMerchantId(String merchantId);


    /**
     * 我的团队列表
     *
     * @param phone    手机号
     * @param pageNum  页数
     * @param pageSize 每页条数
     * @return
     */
    AjaxResult selectMerchantMyTeam(String phone, Integer pageNum, Integer pageSize);


    /**
     * 客户关系 推荐数量   后台在用到时候看看是干嘛的
     *
     * @param phone
     * @return
     */
    public List<Map<String, Object>> selectLevelsCount(String phone);


    public AjaxResult vipPage(String merchantId);

    /**
     * 商城积分兑换现金：支付密碼支付
     *
     * @param merchantId
     * @param productId
     * @param pwd
     * @return
     */
    AjaxResult shoppingExchangeCashByPwd(String merchantId, String productId, String pwd);

    /**
     * 环信注册
     *
     * @param loginName 手机号
     * @return
     */
    public AjaxResult createNewIMUserSingle(String loginName);

    AjaxResult selectMerchantMyTeamByType(String phone, String type, Integer pageNum, Integer pageSize);


    /**
     * 修改上下级
     *
     * @param merchantPhone
     * @param parPhone
     * @return
     */
    int updateMerchantParent(String merchantPhone, String parPhone);

    /**
     * 分享页面新变动列表
     **/
    public AjaxResult newChangesList(String phone, String day);

    /**
     * 查看上级
     *
     * @param phone
     * @return
     */
    public AjaxResult selectMerchantListByParentPhone(String phone);

    public AjaxResult myTeamTwo(String phone);

    /*********************人脸识别S************************/
    String duibi(String imgUrlM, String imgUrlE);

    String shibi(String imgUrlM);

    AjaxResult authenticationVt(String imgUrlM, String imgUrlE, Merchant merchant);

    AjaxResult personVerify(String imgUrl, String merchantId, String name, String idCard);
    /*********************人脸识别E************************/


}
